import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
import store from '@/store'

Vue.use(VueRouter)

const originPush = VueRouter.prototype.push//把原本的push地址存起来
const originReplace = VueRouter.prototype.replace//把原本的replace地址存起来
//把今后使用的push改成我们自己定义的函数
VueRouter.prototype.push = function(location,resolved,rejected){
    if(resolved === undefined && rejected === undefined){
        return originPush.call(this,location).catch(()=>{})
    }else{
        return originPush.call(this,location,resolved,rejected)
    }
}
VueRouter.prototype.replace = function(location,resolved,rejected){
    if(resolved === undefined && rejected === undefined){
        return originReplace.call(this,location).catch(()=>{})
    }else{
        return originReplace.call(this,location,resolved,rejected)
    }
}


const router = new VueRouter({
    mode:'history',   
    routes,
    scrollBehavior (to, from, savedPosition) {
        return { x: 0, y: 0 }
      }
})

// 设置导航路由全局前置守卫
router.beforeEach(async(to, from, next) => {
    let token = store.state.user.token
    let userInfo = store.state.user.userInfo
    // 判断token在不在
    if (token) {
        // 如果token存在,代表用户登录过,但是用户信息在不在不知道
        if(to.path === '/login'){
            // 登录过,又去重新登录,不应该登录,强制跳转到首页
            next('/')
        }else{
            // 登录过也不是重复去登录,而是去其他页面
            // 判断用户信息有没有
            if (userInfo.name) {
                // 代表用户登录了,也获取到用户信息了
                next()
            }else{
                console.log(1);
                try {
                     // 代表用户登录了,但是没获取用户信息,此时需要获取用户信息
                    //  获取用户信息成功
                    await store.dispatch('getUserInfo')
                    next()
                } catch (error) {
                    // 获取用户信息失败,一般都是token过期
                    // 清空原来的token,重新去登录
                    await store.dispatch('resetToken')
                    next('/login')
                }
            }
        }
    }else{
        // 代表token不存在
        // // next()
        let targetPath = to.path//保存要跳转的变量
        // 判断要去跳转的页面,indexof判断字符串中是否有判断的字体开头,有的话返回对应的索引值,startsWith判断字符串是否是规定开头,返回一个布尔值
        if (targetPath.indexOf('/trade') === 0 || targetPath.startsWith('/pay') || targetPath.startsWith('/center')) {
            next('/login?redirect='+targetPath)
        }else{
            next()
        }
    }
  })

export default router